let QueryData=(function (){
  let myData = {
    certData:{},dataSource:{},
  };
  let dataType = DataUtils.get("dataType");
  let dataTypeFirst = DataUtils.get("first");
  let queryInfo = {};
  function init(cb) {
    let dataInfo = CertData.dataInfo;
    queryInfo = dataInfo.queryInfo;
    myData.certData = CertData.getCertData();
    myData.dataSource = CertData.getData();    
    cb&& cb();
  }
  init();

  function copyData(cols, item,data){
    try{
      let newItem={};
      (cols["certCols"]||[]).forEach(col=>newItem["1-"+col] = item[col])
      if (cols["studentCols"]){
        (cols["studentCols"]||[]).forEach(col =>{
          newItem["2-"+col] = data[col];
          if (data[col] == 0 && data["_null_"+col]== 1){
            newItem["2-"+col]="";
          }
        });
      }      
      return newItem;
    }catch(e){
      debugger;
    }
   
  }

  function filterAwardData(excelData) {

    let cols = queryInfo["awards"];

    let list = [];
    $.each(excelData, (k, v) => {

      (v||[]).forEach(g=>{
        (g["items"]||[]).forEach(pool =>{
          (pool["certList"]||[]).forEach(item=>{           
            list.push(copyData(cols,item,item["data"]));
          })

        });
      });
    });
    return list;
  }

  function filterStudentAwardData(excelData) {

    let cols = queryInfo["studentAwards"];

    let list = [];
    $.each(excelData, (k, v) => {

      (v||[]).forEach(g=>{
        (g["items"]||[]).forEach(pool =>{
          (pool["certList"]||[]).forEach(item=>{
            if (item["items"]){
              (item["items"]||[]).forEach(stu=>{
                list.push(copyData(cols,item,stu));
              })
            }else{
              list.push(copyData(cols,item,item["data"]));
            }
          })

        });
      });
    });
    return list;
  }

  function filterStudentBaseData(){
    let data = myData.dataSource;
    let cols = queryInfo["student"];

    let list = [];
    $.each(data["student"], (k, v) => {
      list.push(copyData(cols, {},v));
    });
    return list;
  }

  function genStudentAwards(){
    let awardData = filterStudentAwardData(myData.certData);    
    let template = "html/query/studentAwards."+dataType+".xlsx";
    genAwardsExcel(awardData, "query/获奖清单(个人)",template);
  }

  function genAwards(){
    let awardData = filterAwardData(myData.certData);    
    let template = "html/query/awards."+dataTypeFirst+".xlsx";
    genAwardsExcel(awardData, "query/获奖清单",template);
  }

  function genAwardsExcel(awardData,name, template) {

    let excelData = [];
    awardData.forEach(item => {
      let newItem = [];
      $.each(item, (k, v) => newItem.push(v))
      excelData.push(newItem);
    });

    
    $$.op("report", "excel", {
      template,
      excel: [{"sheet": "awards", "data": excelData, "startRow": 3}],
      name: name +"." +(new Date()).Format("yyyyMMddhhmmss") + ".xlsx"
    }, (r) => {
      layer.msg("成功下载，路径：" + r)
    }, (r) => {
      layer.msg("下载失败")
    });

  }

  function genStudentBaseExcel() {
    let awardData = filterStudentBaseData();
    let excelData = awardData.toArray();

    let template = queryInfo.student.template;
    // let template = "html/usad/query/student.pre.cnad.xlsx";
    $$.op("report", "excel", {
      template,
      excel: [
        {"sheet": "student", "data": excelData, "startRow": 3},
      ],
      name: "query/参赛个人获奖明细."+(new Date()).Format("yyyyMMddhhmmss") + ".xlsx"
    }, (r) => {
      layer.msg("成功下载，路径：" + r)
    }, (r) => {
      layer.msg("下载失败")
    });
  }


  return {
    genAwards,
    genStudentAwards,
    genStudentBaseExcel,
  }
})();

let QueryData2 = (function(){
  let myData = {
    certData:{},dataSource:{},
  };
  let dataType = DataUtils.get("dataType");
  let columns = []
  let queryInfo = {};
  function init(cb) {
    let dataInfo = CertData.dataInfo;
    queryInfo = dataInfo.queryInfo;
    myData.certData = CertData.getCertData();
    myData.dataSource = CertData.getData();    
    columns = dataInfo.queryInfo.student.studentCols;
    cb&& cb();
  }
  init();

  let awardNamesAll = {
    "pre_cnad":{
      "all":[
        "cnad.pre.1",
        "cnad.pre.2",
        "cnad.pre.3",
        "cnad.pre.4",
        "cnad.pre.5",
        "cnad.pre.6",
        "cnad.pre.7",
        "cnad.pre.8",
        "cnad.pre.9",
        "cnad.pre.10",
        "cnad.pre.11",

      ],
      "area":[
        "cnad.pre.101",
        "cnad.pre.102",
        "cnad.pre.103",
        "cnad.pre.104",
        "cnad.pre.105",
        "cnad.pre.106",
        "cnad.pre.107",
      ]
    }, 
    "pre_cnap":{
      "all":[
        "cnap.pre.3",
        "cnap.pre.4",
        "cnap.pre.5",
        "cnap.pre.6",
        "cnap.pre.7",
        "cnap.pre.8",
        "cnap.pre.9",
        "cnap.pre.10",
        "cnap.pre.11",

      ],
      "area":[
        "cnap.pre.103",
        "cnap.pre.104",
        "cnap.pre.105",
        "cnap.pre.106",
        "cnap.pre.107",
      ]
    },    
    "pre_cnat":{
      "all":[      
        "cnat.pre.8",
        "cnat.pre.9",
        "cnat.pre.10",
        "cnat.pre.11",
      ],
      "area":[
      ]
    },
    "china_cnad":{
      "all":[
        "china.cnad.1", // 全国个人单项荣誉-音乐
        "china.cnad.2", // 全国个人单项荣誉-经济
        "china.cnad.3", // 全国个人单项荣誉-社会科学
        "china.cnad.4", // 全国个人单项荣誉-数学
        "china.cnad.5", // 全国个人单项荣誉-文学
        "china.cnad.6", // 全国个人单项荣誉-科学
        "china.cnad.7", // 全国个人单项荣誉-艺术
        "china.cnad.8", // 全场第一（总分）
        "china.cnad.9.1", // 单项全场第一-音乐
        "china.cnad.9.2", // 单项全场第一-经济
        "china.cnad.9.3", // 单项全场第一-社会科学
        "china.cnad.9.4", // 单项全场第一-数学
        "china.cnad.9.5", // 单项全场第一-文学
        "china.cnad.9.6", // 单项全场第一-科学
        "china.cnad.9.7", // 单项全场第一-艺术
        "china.cnad.10", // 全国个人总分荣誉
        "china.cnad.11", // 全国数理个人总分荣誉
        "china.cnad.12", // 全国社科个人总分荣誉
        "china.cnad.14", // 全国人文个人总分荣誉
        "china.cnad.15", // 队内最高分
        "china.cnad.17", // 写作全场第一
        "china.cnad.18", // 全国个人写作荣誉
        "china.cnad.22", // 最佳演讲者        
        "china.cnad.16", // 全国团队总分荣誉
        "china.cnad.19", // 全国通识学术大满贯团队荣誉
        "china.cnad.20", // 全国学术探究团队荣誉
        "china.cnad.21", // 全国跨学科主题演讲团队荣誉
        "china.cnad.23", // 全国迷你博物馆团队荣誉
        "china.cnad.24", // 全国超级问答团队荣誉
        "china.cnad.25", // 全球站研习进阶荣誉
      ],
      "area":[
        "china.cnad.101", // 区域个人单项荣誉-音乐
        "china.cnad.102", // 区域个人单项荣誉-经济
        "china.cnad.103", // 区域个人单项荣誉-社会科学
        "china.cnad.104", // 区域个人单项荣誉-数学
        "china.cnad.105", // 区域个人单项荣誉-文学
        "china.cnad.106", // 区域个人单项荣誉-科学
        "china.cnad.107", // 区域个人单项荣誉-艺术
        "china.cnad.108", // 区域个人总分荣誉        
        "china.cnad.109", // 区域团队总分荣誉
        "china.cnad.110", // 区域个人写作荣誉
        "china.cnad.111", // 区域学术探究团队荣誉
        "china.cnad.112", // 区域跨学科主题演讲团队荣誉
        "china.cnad.113", // 区域迷你博物馆团队荣誉
      ],
    },
    "china_cnap":{
      "all":[
        "china.cnap.3", // 全国个人单项荣誉-社会科学
        "china.cnap.4", // 全国个人单项荣誉-数学
        "china.cnap.5", // 全国个人单项荣誉-文学
        "china.cnap.6", // 全国个人单项荣誉-科学
        "china.cnap.7", // 全国个人单项荣誉-艺术
        "china.cnap.8", // 全场第一（总分）
        "china.cnap.9.3", // 单项全场第一-社会科学
        "china.cnap.9.4", // 单项全场第一-数学
        "china.cnap.9.5", // 单项全场第一-文学
        "china.cnap.9.6", // 单项全场第一-科学
        "china.cnap.9.7", // 单项全场第一-艺术
        "china.cnap.10", // 全国个人总分荣誉
        "china.cnap.11", // 全国数理个人总分荣誉
        "china.cnap.14", // 全国人文个人总分荣誉
        "china.cnap.15", // 队内最高分
        "china.cnap.17", // 写作全场第一
        "china.cnap.18", // 全国个人写作荣誉
        "china.cnap.22", // 最佳演讲者  
        "china.cnap.16", // 全国团队总分荣誉
        "china.cnap.19", // 全国通识学术大满贯团队荣誉
        "china.cnap.20", // 全国学术探究团队荣誉
        "china.cnap.21", // 全国主题演讲团队荣誉
        "china.cnap.23", // 全国迷你博物馆团队荣誉
        "china.cnap.24", // 全国超级问答团队荣誉
        "china.cnap.25", // 全球站研习进阶荣誉
        
        
      ],
      "area":[
        "china.cnap.103", // 区域个人单项荣誉-社会科学
        "china.cnap.104", // 区域个人单项荣誉-数学
        "china.cnap.105", // 区域个人单项荣誉-文学
        "china.cnap.106", // 区域个人单项荣誉-科学
        "china.cnap.107", // 区域个人单项荣誉-艺术
        "china.cnap.108", // 区域个人总分荣誉
        "china.cnap.109", // 区域团队总分荣誉
        "china.cnap.110", // 区域个人写作荣誉
        "china.cnap.111", // 区域学术探究团队荣誉
        "china.cnap.112", // 区域主题演讲团队荣誉
        "china.cnap.113", // 区域迷你博物馆团队荣誉
      ],
    },
    "china_cnat":{
      "all":[
        "china.cnat.3", // 全国社科之星
        "china.cnat.6", // 全国科学之星
        "china.cnat.7", // 全国艺术之星
        "china.cnat.8", // 全场第一（总分）
        "china.cnat.9.3", // 单项全场第一-社会科学
        "china.cnat.9.6", // 单项全场第一-科学
        "china.cnat.9.7", // 单项全场第一-艺术
        "china.cnat.10", // 全国通识全能个人总分荣誉
        "china.cnat.15", // 队内最高分
        "china.cnat.22", // 最佳演讲者
        "china.cnat.16", // 全国通识全能团队荣誉
        "china.cnat.19", // 全国通识学术大满贯团队荣誉
        "china.cnat.20", // 全国学术探究团队荣誉
        "china.cnat.21", // 全国创意演讲团队荣誉
        "china.cnat.23", // 全国迷你博物馆团队荣誉
        "china.cnat.24", // 全国超级问答团队荣誉
      ],
      "area":[
        "china.cnat.103", // 区域社科之星
        "china.cnat.106", // 区域科学之星
        "china.cnat.107", // 区域艺术之星
        "china.cnat.108", // 区域通识全能个人总分荣誉
        "china.cnat.109", // 区域通识全能团队荣誉
        "china.cnat.111", // 区域学术探究团队荣誉
        "china.cnat.112", // 区域创意演讲团队荣誉
        "china.cnat.113", // 区域迷你博物馆团队荣誉
      ],
    },
    "global_cnad":{
      "all":[
        
        "global.cnad.1", //全球站-个人-学科单项荣誉-Music
        "global.cnad.2", //全球站-个人-学科单项荣誉-Economics
        "global.cnad.3", //全球站-个人-学科单项荣誉-Social Science
        "global.cnad.4", //全球站-个人-学科单项荣誉-Mathematics
        "global.cnad.5", //全球站-个人-学科单项荣誉-Literature
        "global.cnad.6", //全球站-个人-学科单项荣誉-Science
        "global.cnad.7", //全球站-个人-学科单项荣誉-Art
        "global.cnad.8", //全球站-个人-总分第一
        "global.cnad.9.1", //全球站-个人-单项第一-Music
        "global.cnad.9.2", //全球站-个人-单项第一-Economics
        "global.cnad.9.3", //全球站-个人-单项第一-Social Science
        "global.cnad.9.4", //全球站-个人-单项第一-Mathematics
        "global.cnad.9.5", //全球站-个人-单项第一-Literature
        "global.cnad.9.6", //全球站-个人-单项第一-Science
        "global.cnad.9.7", //全球站-个人-单项第一-Art
        "global.cnad.10", //全球站-个人-个人总分荣誉
        "global.cnad.15", //全球站-个人-队内最高分
        "global.cnad.22", //全球站-个人-最佳演讲者
              
        "global.cnad.16", //全球站-团队-团队总分荣誉
        "global.cnad.19", //全球站-团队-通识学术大满贯团队荣誉
        "global.cnad.20", //全球站-团队-学术探究团队荣誉
        "global.cnad.21", //全球站-团队-跨学科主题演讲团队荣誉
        "global.cnad.24", //全球站-团队-超级问答团队荣誉
        "global.cnad.30.1", //全球站-团队-U20青年博雅之声卓越成就奖
        "global.cnad.30.2", //全球站-团队-U20青年博雅之声学者奖
        "global.cnad.30.3", //全球站-团队-U20青年博雅之声跨文化协同奖
        "global.cnad.30.4", //全球站-团队-U20青年博雅之声解决方案创新奖
        "global.cnad.30.5", //全球站-团队-U20青年博雅之声洞察与批判性思维奖
        "global.cnad.30.6", //全球站-个人-全球博雅青年领袖Top 100（U20）
      ],
      "area":[],
    },
    "global_cnap":{
      "all":[
        
        "global.cnap.3", //全球站-个人-学科单项荣誉-Social Science
        "global.cnap.4", //全球站-个人-学科单项荣誉-Mathematics
        "global.cnap.5", //全球站-个人-学科单项荣誉-Literature
        "global.cnap.6", //全球站-个人-学科单项荣誉-Science
        "global.cnap.7", //全球站-个人-学科单项荣誉-Art
        "global.cnap.8", //全球站-个人-全场第一（总分）
        "global.cnap.9.3", //全球站-个人-单项全场第一-Social Science
        "global.cnap.9.4", //全球站-个人-单项全场第一-Mathematics
        "global.cnap.9.5", //全球站-个人-单项全场第一-Literature
        "global.cnap.9.6", //全球站-个人-单项全场第一-Science
        "global.cnap.9.7", //全球站-个人-单项全场第一-Art
        "global.cnap.10", //全球站-个人-个人总分荣誉
        "global.cnap.15", //全球站-个人-队内最高分
        "global.cnap.22", //全球站-个人-最佳演讲者
        
        "global.cnap.16", //全球站-团队-团队总分荣誉
        "global.cnap.19", //全球站-团队-通识学术大满贯团队荣誉
        "global.cnap.20", //全球站-团队-学术探究团队荣誉
        "global.cnap.21", //全球站-团队-跨学科主题演讲团队荣誉
        "global.cnap.24", //全球站-团队-超级问答团队荣誉
        "global.cnap.30.1", //全球站-团队-U20青年博雅之声卓越成就奖
        "global.cnap.30.2", //全球站-团队-U20青年博雅之声学者奖
        "global.cnap.30.3", //全球站-团队-U20青年博雅之声跨文化协同奖
        "global.cnap.30.4", //全球站-团队-U20青年博雅之声解决方案创新奖
        "global.cnap.30.5", //全球站-团队-U20青年博雅之声洞察与批判性思维奖
        "global.cnap.30.6", //全球站-个人-全球博雅青年领袖Top 100（U20）
      ],
      "area":[],
    },
  };



  function getStudentAwardsMap(awardMap) {
    return CertData.getStudentAwardsMap();
  }

  function attachAwardInfo(item, names, awardMap, pre) {
    let isAttach = false;
    let isOk = 0;
    let num = 0;
    if (names.length == 0){
      return {isAttach,isOk,num};
    }
    isAttach = true;
    names.forEach(col => {
      if (awardMap && awardMap[col]) {
        isOk = 1;
        num++;
        item[pre + col] = awardMap[col];

      } else {
        item[pre + col] = "";
      }
    });

    return {isAttach, isOk, num}
  }

  function getStudentData(awardFullMap,mode) {
    let data = myData.dataSource;
    let list = data["student"];
    let excelDataList = [];
    let awardMap = getStudentAwardsMap(awardFullMap);
    
    list.forEach(item => {

      let newItem = {};
      columns.forEach(c => {
        if (item[c] || item[c] === 0 ){
          newItem[c] = item[c];
        }else{
          newItem[c] = "";
        }

      });
      let awardRegion = awardMap["region"][item["id"]];

      let regInfo = attachAwardInfo(newItem, awardNamesAll[dataType]["area"], awardRegion, "");
      if (regInfo.isAttach){
        newItem["RegNum"] = regInfo.num;
        newItem["RegIsOK"] = regInfo.isOk;
      }
      

      let awardAll = awardMap["all"][item["id"]];
      let allInfo = attachAwardInfo(newItem, awardNamesAll[dataType]["all"], awardAll, "");
      newItem["AllNum"] = allInfo.num;
      newItem["AllIsOK"] = allInfo.isOk;

      newItem["TotalNum"] = regInfo.num + allInfo.num;
      newItem["TotalIsOK"] = regInfo.isOk || allInfo.isOk

      excelDataList.push(newItem);
    });
    return excelDataList;
  }

  

  function genStudentExcel(mode) {
    let awardFullMap =  myData.certData;
    let list = getStudentData(awardFullMap,mode);
    let excelData = [];
    list.forEach(item => {
      let newItem = [];
      $.each(item, (k, v) => newItem.push(v))
      excelData.push(newItem);
    });

    let template = "html/query/student."+dataType+".xlsx";
    $$.op("report", "excel", {
      template,
      excel: [{"sheet": "student", "data": excelData, "startRow": 3}],
      name: "query/参赛个人获奖情况." + (new Date()).Format("yyyyMMddhhmmss") + ".xlsx"
    }, (r) => {
      layer.msg("成功下载，路径：" + r)
    }, (r) => {
      layer.msg("下载失败")
    });
  }
  return {
    genStudentExcel
  }

})()